home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir39 / 8048.zip / COUNTER.ASM < prev    next >
Assembly Source File  |  1992-05-02  |  10KB  |  393 lines

  1. ;**************************************************************************
  2. ;
  3. ; FILE NAME          : COUNTER.ASM
  4. ; DATE LAST MODIFIED : 8-19-90
  5. ; WRITTEN BY         : MICHAEL MCCARRICK
  6. ; DESCRIPTION:
  7. ;  THIS PROGRAM COUNTS PULSES APPLIED TO THE T0 PIN ON THE 8748
  8. ;  IF T1 == 0 THE COUNTER IS INCREMENTED BY 703125
  9. ;  IF T1 == 1 THE COUNTER IS DECREMENTED BY 703125
  10. ;  WHEN THE COUNT REACHES 360000000 IN THE POS DIRECTION IT IS RESET TO ZERO
  11. ;  WHEN THE COUNT REACHES ZERO IN THE NEG DIRECTION IT IS RESET TO 359296875
  12. ;
  13. ;  THE COUNT IS RETAINED IN MEMORY LOCATIONS STARTING WITH DIG0 (L.S.D.)
  14. ;  IN BCD FORMAT, ONE DIGIT TO MEMORY LOCATION.  THE FOUR MOST SIGNIFICANT
  15. ;  DIGITS ARE DISPLAYED.
  16. ;
  17. ;  R0 IS USED AS A STACK POINTER BY THE SUBROUTINES PUSH AND POP
  18. ;
  19. ;**************************************************************************
  20.  
  21. DIG1    EQU     32
  22. DIG2    EQU     33
  23. DIG3    EQU     34
  24. DIG4    EQU     35
  25. DIG5    EQU     36
  26. DIG6    EQU     37
  27. DIG7    EQU     38
  28. DIG8    EQU     39
  29. DIG9    EQU     40
  30. STACK   EQU     41
  31.  
  32. ;**************************************************************************
  33.  
  34.         ORG     0
  35.         JMP     START
  36.  
  37.         ORG     3
  38.         JMP     ISR
  39.  
  40.         ORG     7               ; TIMER INTERRUPT
  41.         INC     R7
  42.         RETR
  43.  
  44. ;**************************************************************************
  45.  
  46. ISR:    NOP
  47.         JMP     ISR
  48.         RETR
  49.  
  50.  
  51. START:
  52.         MOV     R0,#STACK       ; INIT STACK POINTER TO START OF DATA STORE
  53.         MOV     R7,#0
  54.  
  55.         CALL    ZERSET
  56.  
  57.         CALL    DISPLAY         ; DISPLAY COUNTERS
  58.  
  59.         EN      I
  60.         STRT    T
  61.         EN      TCNTI
  62.  
  63.         JT0     ST1             ; IF INITIALLY HIGH GO STRAIGHT TO ST1
  64. MN1:    JNT0    MN1             ; ELSE WAIT FOR IT TO GO HIGH
  65.  
  66. ST1:    JT0     ST1             ; WAIT FOR T0 TO GO LOW
  67. ;        JT0     ST1
  68. ;        JT0     ST1
  69. ;        JT0     ST1
  70.  
  71.         JT1     ST2             ; IF (T1 == 1) THEN DECREMENT COUNT
  72.         CALL    INCR            ; ELSE INCREMENT COUNT
  73.         JMP     ST3
  74.  
  75. ST2:    CALL    DECR            ; DECREMENT COUNT
  76.  
  77. ST3:    CALL    DISPLAY         ; DISPLAY NEW COUNT
  78. ;ST4:    JNT0    ST4             ; WAIT FOR T0 TO GO HIGH
  79.         JMP     ST1
  80.  
  81. ;***********************************************************************
  82. ; ZERSET -- ZEROS COUNTER MEMORY LOCATIONS
  83. ZERSET:
  84.         MOV     A,#0
  85.         MOV     R1,#DIG9
  86.         MOV     @R1,A
  87.         DEC     R1
  88.         MOV     @R1,A
  89.         DEC     R1
  90.         MOV     @R1,A
  91.         DEC     R1
  92.         MOV     @R1,A
  93.         DEC     R1
  94.         MOV     @R1,A
  95.         DEC     R1
  96.         MOV     @R1,A
  97.         DEC     R1
  98.         MOV     @R1,A
  99.         DEC     R1
  100.         MOV     @R1,A
  101.         DEC     R1
  102.         MOV     @R1,A
  103.         RET
  104.  
  105. ;***********************************************************************
  106. ; PUSH -- MOVES THE CONTENTS OF ACC TO THE LOCATION POINTED TO BY R0
  107. ;         THEN INCREMENTS R0.
  108. PUSH:
  109.         MOV     @R0,A
  110.         INC     R0
  111.         RET
  112.  
  113. ;***********************************************************************
  114. ; POP -- DECREMENTS R0 AND THEN MOVES THE CONTENTS OF THE LOCATION POINTED
  115. ;        TO BY R0 TO ACC
  116. POP:
  117.         DEC     R0
  118.         MOV     A,@R0
  119.         RET
  120.  
  121. ;***********************************************************************
  122. ; INCR -- INCREMENTS THE COUNTER REGISTERS BY 0000703125 BCD
  123. INCR:
  124.         MOV     R1,#DIG1
  125.         MOV     A,@R1
  126.         SWAP    A               ; SWAP SO ADDITION CAN GENERATE CARRY
  127.         ADD     A,#50H
  128.         DA      A
  129.         SWAP    A
  130.         MOV     @R1,A
  131.  
  132.         INC     R1              ; POINT TO DIG2
  133.         MOV     A,@R1
  134.         SWAP    A
  135.         JNC     INC1
  136.         ADD     A,#30H
  137.         JMP     INC2
  138. INC1:
  139.         ADD     A,#20H
  140. INC2:
  141.         DA      A
  142.         SWAP    A
  143.         MOV     @R1,A
  144.  
  145.         INC     R1              ; POINT TO DIG3
  146.         MOV     A,@R1
  147.         SWAP    A
  148.         JNC     INC3
  149.         ADD     A,#20H
  150.         JMP     INC4
  151. INC3:
  152.         ADD     A,#10H
  153. INC4:
  154.         DA      A
  155.         SWAP    A
  156.         MOV     @R1,A
  157.  
  158.         INC     R1              ; POINT TO DIG4
  159.         MOV     A,@R1
  160.         SWAP    A
  161.         JNC     INC5
  162.         ADD     A,#40H
  163.         JMP     INC6
  164. INC5:
  165.         ADD     A,#30H
  166. INC6:
  167.         DA      A
  168.         SWAP    A
  169.         MOV     @R1,A
  170.  
  171.         INC     R1              ; POINT TO DIG5
  172.         MOV     A,@R1
  173.         SWAP    A
  174.         JNC     INC7
  175.         ADD     A,#10H
  176.         JMP     INC8
  177. INC7:
  178.         ADD     A,#00H
  179. INC8:
  180.         DA      A
  181.         SWAP    A
  182.         MOV     @R1,A
  183.  
  184.         INC     R1              ; POINT TO DIG6
  185.         MOV     A,@R1
  186.         SWAP    A
  187.         JNC     INC9
  188.         ADD     A,#80H
  189.         JMP     INC10
  190. INC9:
  191.         ADD     A,#70H
  192. INC10:
  193.         DA      A
  194.         SWAP    A
  195.         MOV     @R1,A
  196.  
  197.         INC     R1              ; POINT TO DIG7
  198.         MOV     A,@R1
  199.         SWAP    A
  200.         JNC     INC11
  201.         ADD     A,#10H
  202.         JMP     INC12
  203. INC11:
  204.         ADD     A,#00H
  205. INC12:
  206.         DA      A
  207.         SWAP    A
  208.         MOV     @R1,A
  209.  
  210.         INC     R1              ; POINT TO DIG8
  211.         MOV     A,@R1
  212.         SWAP    A
  213.         JNC     INC13
  214.         ADD     A,#10H
  215.         JMP     INC14
  216. INC13:
  217.         ADD     A,#00H
  218. INC14:
  219.         DA      A
  220.         SWAP    A
  221.         MOV     @R1,A
  222.  
  223.         INC     R1              ; POINT TO DIG9, DON'T TEST FOR CARRY
  224.         MOV     A,@R1
  225.         JNC     INC15
  226.         ADD     A,#1
  227. INC15:
  228.         DA      A
  229.         MOV     @R1,A
  230.  
  231. ; TEST FOR 360 (R7 == 3, R6 == 60) COUNT, IF SO SET COUNTERS TO ZERO
  232.  
  233.         MOV     R1,#DIG9        ; IF (DIG9 == 3) THEN CHECK DIG8
  234.         MOV     A,#3
  235.         CPL     A
  236.         ADD     A,@R1
  237.         INC     A
  238.         JNZ     INCEND
  239.  
  240.         DEC     R1              ; IF (DIG8 == 6) THEN CHECK DIG7
  241.         MOV     A,#6
  242.         CPL     A
  243.         ADD     A,@R1
  244.         INC     A
  245.         JNZ     INCEND
  246.  
  247.         DEC     R1              ; IF (DIG7 == 0) THEN RESET
  248.         MOV     A,@R1
  249.         JNZ     INCEND
  250.  
  251.         CALL    ZERSET          ; IF HERE THEN R7 == 3 && R6 == 60
  252.                                 ;   ZERO COUNTERS
  253. INCEND:
  254.         RET
  255.  
  256. ;***********************************************************************
  257. ; SUB -- SUBRATCTS FROM @R1 THE BCD DIGIT IN THE LOWER NIBBLE OF ACC
  258. ;        RESULT RETURNED IN @R1, R2 IS USED TO STORE BORROWS BETWEEN CALLS
  259. ;        R3 USED AS LOOP COUNTER, NOT RESTORED
  260. SUB:
  261.         ADD     A,R2            ; ADD IN BORROW FROM PREVIOUS CALLS
  262.         MOV     R3,A            ; R3 == AMOUNT TO SUBTRACT
  263.         MOV     R2,#0           ; ZERO BORROW FOR NEXT CALL
  264.  
  265.         JNZ     SUB1            ; IF (R3 == 0) THEN RET
  266.         RET
  267. SUB1:
  268.         MOV     A,@R1           ; GET DIGIT TO SUBTRACT FROM
  269. SUB2:
  270.         JZ      SUB3            ; IF ZERO SET TO 9
  271.         DEC     A
  272.         JMP     SUB4
  273.  
  274. SUB3:   MOV     A,#9
  275.         MOV     R2,#1
  276. SUB4:
  277.         DJNZ    R3,SUB5
  278.         JMP     SUB6
  279. SUB5:   JMP     SUB2
  280. SUB6:
  281.         MOV     @R1,A
  282.         RET
  283.  
  284. ;***********************************************************************
  285. ; DECR -- DECREMENTS THE COUNTER REGISTERS BY 00 00 70 31 25
  286. DECR:
  287.         CALL    ZERO            ; TEST IF COUNT IS CURRENTLY ZERO
  288.         JNZ     DEC1            ; IF != 0 THEN PROCEED WITH DECREMENT
  289.         JMP     DEC10
  290.  
  291. DEC1:
  292.         MOV     R2,#0           ; ZERO BORROW FOR FIRST ADDITION
  293.  
  294.         MOV     R1,#DIG1        ; DIGIT #1
  295.         MOV     A,#5
  296.         CALL    SUB
  297.  
  298.         INC     R1              ; DIGIT #2
  299.         MOV     A,#2
  300.         CALL    SUB
  301.  
  302.         INC     R1              ; DIGIT #3
  303.         MOV     A,#1
  304.         CALL    SUB
  305.  
  306.         INC     R1              ; DIGIT #4
  307.         MOV     A,#3
  308.         CALL    SUB
  309.  
  310.         INC     R1              ; DIGIT #5
  311.         MOV     A,#0
  312.         CALL    SUB
  313.  
  314.         INC     R1              ; DIGIT #6
  315.         MOV     A,#7
  316.         CALL    SUB
  317.  
  318.         INC     R1              ; DIGIT #7
  319.         MOV     A,#0
  320.         CALL    SUB
  321.  
  322.         INC     R1              ; DIGIT #8
  323.         MOV     A,#0
  324.         CALL    SUB
  325.  
  326.         INC     R1              ; DIGIT #9
  327.         MOV     A,#0
  328.         CALL    SUB
  329.  
  330. DEC10:
  331.         RET
  332.  
  333. ;***********************************************************************
  334. ; ZERO -- TEST IF COUNTERS == 0, IF SO COUNT IS RESET
  335. ;         TO 3 5 9 2 9 6 8 7 5 BCD
  336. ZERO:
  337.         MOV     R2,#8           ; LOOP COUNTER FOR 9 DIGITS
  338.         MOV     R1,#DIG1-1
  339. ZER1:
  340.         INC     R1
  341.         MOV     A,@R1
  342.         JNZ     ZER4
  343.         DJNZ    R2,ZER1
  344.  
  345.         MOV     R1,#DIG1        ; RESET COUNTER MEMORY LOCATIONS
  346.         MOV     @R1,#5
  347.         INC     R1
  348.         MOV     @R1,#7
  349.         INC     R1
  350.         MOV     @R1,#8
  351.         INC     R1
  352.         MOV     @R1,#6
  353.         INC     R1
  354.         MOV     @R1,#9
  355.         INC     R1
  356.         MOV     @R1,#2
  357.         INC     R1
  358.         MOV     @R1,#9
  359.         INC     R1
  360.         MOV     @R1,#5
  361.         INC     R1
  362.         MOV     @R1,#3
  363.  
  364.         MOV     A,#0            ; COUNTERS == ZERO FLAG
  365.         JMP     ZER5
  366.  
  367. ZER4:   MOV     A,#1            ; COUNTERS != ZERO FLAG
  368. ZER5:
  369.         RET
  370.  
  371. ;*************************************************************************
  372. ; DISPLAY -- DISPLAYS THE 4 DIGIT BCD NUMBER CONTAINED IN R7, R6 AND R5
  373. DISPLAY:
  374.         MOV     R1,#DIG9
  375.         MOV     A,@R1
  376.         SWAP    A
  377.         DEC     R1
  378.         ADD     A,@R1
  379.         OUTL    P2,A            ; DISPLAY ON PORT
  380.  
  381.         DEC     R1
  382.         MOV     A,@R1
  383.         SWAP    A
  384.         DEC     R1
  385.         ADD     A,@R1
  386.         OUTL    P1,A            ; DISPLAY ON PORT
  387.  
  388. ;        CALL    REGPAC
  389.  
  390. DISPEND: RET
  391.  
  392.         END
  393.